package condominio.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


import condominio.excepcion.DAOExcepcion;
import condominio.modelo.Persona;
import condominio.util.ConexionBD;

public class PersonaDAO extends BaseDAO{
	
	public boolean login(Persona Persona) throws DAOExcepcion {
		System.out.println("PersonaDAO: obtener(Persona Persona)");
		Persona pe = new Persona();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select pers_dni from Persona where pers_dni = ? and pers_contrasena = ?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, Persona.getDni());
			stmt.setString(2, Persona.getContrasena());
			rs = stmt.executeQuery();
			if (rs.next()) {
				pe.setDni(rs.getString(1));				
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		if (pe.getDni().isEmpty()) {
			return false;
		}
		else{
			return true;
		}
	}
	
	public void insertar(Persona pe) throws DAOExcepcion {
		System.out.println("PersonaDAO: insertar(Persona pe)");
		String query = "INSERT INTO Persona(pers_id,pers_nombres,pers_apellidos,pers_dni,pers_fch_nac,pers_mail,pers_contrasena,pers_estado,PERSONA_TIPO_Tipo_Id) VALUES (?,?,?,?,?,?,?,?,?)";
		
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, pe.getIdpersona());
			stmt.setString(2, pe.getNombres());
			stmt.setString(3, pe.getApellidos());
			stmt.setString(4, pe.getDni());
			stmt.setString(5, pe.getFechaNacimiento());
			stmt.setString(6, pe.getMail());
			stmt.setString(7, pe.getContrasena());
			stmt.setString(8, pe.getEstado());
			stmt.setString(9, pe.getTipo());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	
	public void ActualizaEstado(int Idpersona) throws DAOExcepcion {
		System.out.println("PersonaDAO: ActualizaEstado(int idPersona)");
		String query = "UPDATE Persona set pers_estado='0' WHERE pers_id=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, Idpersona);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo dar de Baja");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	
	public Persona ObtenerPersona(int id) throws DAOExcepcion {
		System.out.println("PersonaDAO: ObtenerPersona(int id)");
		Persona persona = new Persona();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "SELECT pers_nombres,pers_apellidos from Persona where pers_id=?";
			stmt = con.prepareStatement(query);
			stmt.setInt(1, id);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Persona pe = new Persona();
				pe.setNombres(rs.getString("pers_nombres"));
				pe.setApellidos(rs.getString("pers_apellidos"));
				persona=pe;
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return persona;
	}
	

}
